AOSP 编译 刷机 环境配置 | 您所在的位置:网站首页 › indexing jdk › AOSP 编译 刷机 环境配置 |
本文大量参考: https://zhuanlan.zhihu.com/p/535380743购入手机:pixel 4 刷机系统:Ubuntu 22.04 刷入系统:Android 11 开发环境:Intellij Idea, vim, silver-searcher, klogg. 环境搭建首先装好 ubuntu 系统,不一定非得是22.04,但是也别太老,参考官方教程即可。 https://source.android.com/source/initializing?hl=zh-cn安装JDK经查证,本人用的系统一直是 java1.8,也就是 openjdk-8-jdk 以下原文内容引用一下:以Ubuntu系统为例:sudo apt-get updatesudo apt-get install openjdk-11-jdk注:现在AOSP编译要求JDK版本>=9安装其他程序包sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5注:官方文档中缺失了libncurses5,会导致编译中途找不到libncurses.so.5库 安装 Repo 并使用 Repo 更新 AOSP 源码https://source.android.com/source/downloading?hl=zh-cn然后查询 https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds这个网站,获取你要编译的 android 版本,并同时记住 build id(后文用到) 以我为例,android 版本: android-11.0.0_r46 build_id: RQ3A.211001.001 repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r46 repo sync -j8 #j8代表使用8个线下载驱动在 https://developers.google.com/android/drivers?hl=zh-cn这个网站,根据 build id(RQ3A.211001.001) 找到你的驱动,进行下载,解压 .sh 到上一步 aosp 根目录,然后执行 .sh 文件。 会将对应驱动解压到 vendor 相关目录。 注意:我在 build pixel4 对应版本的 android11 时候遇到如下错误: “vendor/qcom/coral/proprietary/com.qualcomm.qcrilmsgtunnel.xml', needed by 'out/target/product/flame/system_ext/etc/permissions/com.qualcomm.qcrilmsgtunnel.xml', missing and no known rule to make it” 我编译的是 flame 版本,但是它提及到了 coral 的驱动。所以搜索相同 build id 的coral (Pixel 4 XL)的 qualcomm 驱动安装上。 编译代码进入 aosp 根目录,依次执行: 1 source build/envsetup.sh这一步是向当前shell写入环境变量,比如这时不论你在哪个文件夹,敲croot都可以回到 aosp 根目录。 2 lunch根据选项选择就可以(敲入指定数字后回车)。pixel 4 设备是 flame。设备代码参照这里: https://source.android.com/docs/setup/build/running?hl=zh-cn#selecting-device-build这时会打出很多内容,可以注意一下 OUT_DIR,通过 export 该变量可以指定编译位置 export OUT_DIR=/xxx/xxxx/xx/x如果你指定了,可以再次输入 lunch 确认一下。 3 m -j8这里的 -jn 是多线程的意思。如果内存小于16G,建议开1-2个线程。 我是 2 x 8G 的内存,在编译时会弹出窗口,显示我有 15.8G 内存,开8个线程,会在编译到90左右的时候闪退,如果开着很多其他窗口,抢占内存,内存不够的话,会报一个错误,都没法直接开始。此时的建议是重启,不打开任何窗口,然后开一个terminal,开1-2个线程编译。(2 x 32G的金百达套条双11就买!) 不要使用 root 账号编译这里推荐一下金百达的内存,是64G大内存里相对性价比最高的,问了很多同学和装机群的一些大佬,他们都在用。(返佣只有几毛的产品,我也是良心推荐了) 刷机先将手机的BL锁解开(每个机型都不同,网上会有对应的教程),进入fastboot模式:这里推荐用 adb 的方式进入,先 adb devices 确认设备已链接,然后输入 adb reboot bootloader 来使设备进入fastboot模式。配置fastboot工具(现在Google好像推出了在线刷写工具https://flash.android.com/,可以尝试使用),可以在aosp目录下通过make fastboot命令编译出来,也可以直接从网上下载:https://developer.android.com/studio/releases/platform-tools (如果你按照前面描述的方式build,那么它已经 build 到 google_aosp11/out/soong/host/linux-x86/bin/fastboot 了)进入编译后产生的镜像的目录..../aosp/out/target/product/flame(这个是你机型的代号,每种机器都不一样)执行命令fastboot flashall -w5. 重启即可看到,我们编译的Android系统已经运行到了手机上 fastboot reboot #重启命令too many open files在Linux系统下有打开文件数的限制,可以使用以下命令设置最大可打开文件数 # ulimit -a 可以查看当前限制 ulimit -n 2048由于本人不使用 Mac OS,相关内容没有收录。配置IDE环境生成IDE相关项目文件使用的是 intellij IDEA 在代码根目录,执行以下代码: source build/envsetup.sh mmma development/tools/idegen development/tools/idegen/idegen.sh值得注意的是,内存不够,这里也是会编译失败的,好想要大内存啊w(゚Д゚)w。 执行 idegen.sh 时,可能会遇到错误 find: ‘out/target/product/flame/root/d’: Permission denied find: ‘out/target/product/flame/debug_ramdisk/d’: Permission denied find: ‘out/target/product/flame/recovery/root/d’: Permission denied在执行 idegen.sh 前加 sudo 就可以,但是这需要 java 和 javac 在系统里装 11 的。 建议忽略这里的问题就好。 在执行完上述代码后,会在 AOSP 根目录生成 IDE 相关文件 android.ipr 和 android.iml: android.iws 包含工作区的个人设置,比如打开过的文件,版本控制工具的配置,本地修改历史,运行和debug的配置等。android.ipr 一般保存了工程相关的设置,比如modules和modules libraries的路径,编译器配置,入口点等。android.iml 用来描述modules。它包括modules路径、 依赖关系,顺序设置等。一个项目可以包含多个 *.iml 文件。使用 Intellij IDEA 打开 android.ipr 文件. 配置IDE刚打开的时候,可能会卡,打不开配置文件,重启IDE即可。 这些参数是我自己配置的,请根据你的电脑酌情配置。 Intellij Idea 在 indexing 期间可能会很卡,有些耐心。 1)修改 VM 内存大小Help > Edit Custom VM Options 修改内容: -Xms1g -Xmx5g2)修改文件大小 i) Help -> Edit custom properties 添加内容: idea.max.intellisense.filesize=100000 # 文件大小限制 idea.case.sensitive.fs=true # 区分大小写选项(这个可以不要,看你自己)ii) 参考 https://youtrack.jetbrains.com/articles/IDEA-A-2/Inotify-Watches-Limit-Linux修改SDK和JDK选项 -- 当需要开发APP调试底层代码时,继续参考:把Android源码导入Android Studio进行调试File -> Project Structure -> SDKs File -> Project Structure -> SDKs 可以新建一个新的 java jdk,或者编辑原有的。 然后删除下面 classpath 标签页里的所有文件,这是为了确保代码跳转到导入的framework中,而不是sdk中。 File -> Project Structure -> SDKs -> + -> Add Android SDK 添加进你的 android sdk,可通过 Android Studio 安装。 然后将 Classpath 中的 Android SDK 中的 jar 文件删除,否则会跳转到该 jar 中 File -> Project Structure -> Modules -> android -> Dependencies 在下拉窗口中, 选择系统源代码相对应的SDK版本,比如8.0的代码是API26,9.0代码是API28 |
CopyRight 2018-2019 实验室设备网 版权所有 |